package com.jyx.collection.array;

import java.math.BigDecimal;

public class ArrayTest {


	public static void main(String[] args){
//		yangHuiTriangle();
//		jieCheng();
		
		rhomeBus(7);
		
	}
	
	public static void rhomeBus(Integer size){
		if(size % 2 == 0){
			size ++;
		}
		for (int i = 0; i < size / 2 + 1; i++) {
			for (int j = size / 2 + 1; j > i + 1 ; j--) {// 打印左上角空白
				System.out.print(" ");
			}
			for (int j = 0; j < i * 2 + 1; j++) {
				if(j == 0 || j == 2 * i ){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
		for (int i = size / 2 + 1; i < size; i++) {
			for (int j = 0; j < i - size / 2 ; j++) {
				System.out.print(" ");
			}
			for (int j = 0; j < size * 2 - 1 - 2 * i; j++) {
				if(j == 0 || j == 2 * (size - i - 1)){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
			}
			System.out.println();
		}
		
	}
	
	/**
	 * 阶乘
	 * 计算：1+1/2!+1/3!+....+1/20!
	 */
	public static void jieCheng(){
		
		BigDecimal sum = new BigDecimal(0.0);
		BigDecimal factorial = new BigDecimal(1.0);
		int num = 1;
		while(num <= 20){
			sum = sum.add(factorial);
			++num;
			factorial = factorial.multiply(new BigDecimal(1.0/num));
		}
		System.out.println(sum);
		
		
	}
	
	/**
	 *  定义
	 */
	public static void declare(){
		String[] strs ; // 只声明
		String[] strs1 = new String[5];// 声明 并定义长度
		String[] strs2 = {"0", "1", "2", "3"};// 声明 并定义长度和内容
		strs2 = strs1;
	}
	
	/**
	 * 多为数组
	 */
	public static void multiDimensionalArray(){
		// 高中阶段：三个年级段，每个年级段三个班级，每个班级最多五十人
		
		int[][][] school = new int[3][3][50];
	}
	
	/**
	 * 杨辉三角
	 */
	public static void yangHuiTriangle(){
		int levelCount = 10; // 三角层数
		int[][] yangHui = new int[levelCount][0];
		// 使用 for 循环为杨辉三角的每一层创建一个 int 数组
		for (int i = 0; i < levelCount; i++) { // 每次循环生成一行杨辉三角
			yangHui[i] = new int[i + 1];
			// 此层杨辉三角的中包含的元素个数为(i + 1)个
			for (int j = 0; j <= i; j++) {
				// 第一个或者最后一个
				if(i == 0 || j == 0 || j == i){
					yangHui[i][j] = 1;
				}else{
					yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1];
				}
				
				/*// 每次循环计算杨辉三角的一行中的一个元素
				if (i == 0) { // 如果是第一行，则直接赋值为 1
					yangHui[i][j] = 1;
				} else { // 如果不是第一行，则根据上一行的值计算当前行每个元素的值
					int value = 0; // 用来保存当前元素值的 int 变量
					if (j >= 1) {// 根据杨辉三角的计算规则，判断此上方是否有元素
						value += yangHui[i - 1][j - 1];
						// 有则将当前元素上方的值加到 value 变量中
					}
					if (j < i) {
						// 根据杨辉三角的计算规则，判断此上方左边是否有元素
						value += yangHui[i - 1][j];
						// 有则将当前元素上方的值加到 value 变量中
					}
					yangHui[i][j] = value; // 将 value 的值赋给当前元素
				}*/
			}
		}
		for (int i = 0; i < levelCount; i++) { // 循环输出数组元素的值
			for (int j = 0; j < levelCount - i - 1; j++) {
				// 输出相应个数的制表符
				System.out.print("\t");
			}
			for (int j = 0; j <= i; j++) {
				System.out.print(yangHui[i][j] + "\t\t");
			}
			System.out.println();
		}
		
	}
	
	
}
